package cn.mjnxin.iot.connector.message;

import cn.mjnxin.iot.base.cache.LocalCache;
import cn.mjnxin.iot.connector.context.IConnectorContext;
import cn.mjnxin.iot.connector.exception.MessageNotSupportException;

/**
 * 抽象的报文接收器
 * @author CLG 2023年10月10日
 * @version V1.0.0
 */
public interface IMessageReceiver<T extends IMessage<?>>{
    IConnectorContext connectorContext();
    
	/**
	 * 向第三方系统上报日志
	 * @param message
	 * @param updateStatus
	 */
	void reportMessage(T message, boolean updateStatus);
	
	/**
	 * 处理设备重启
	 * @param deviceNo
	 */
	void whenRestart(String deviceNo);
	
    /**
     * 依据二进制信息解析还原 收到的报文
     * @param message
     * @param messageHex
     * @return
     * @throws MessageNotSupportException 
     */
    T onReceiveMessage(byte[] message, String messageHex) throws Exception;
    
    /**
     * 依据上下文缓存和报文类型构造请求报文
     * @param contextCache
     * @param messageType
     * @return
     */
    T makeRequest(LocalCache contextCache, String messageType);
    
    /**
     * 依据上下文缓存和消息类型构造应答报文
     * @param contextCache
     * @param messageType
     * @return
     */
    T makeResponse(LocalCache contextCache, String messageType);
}
